﻿// 
// 
// Solution: DeliveryPlus
// Project: DeliveryPlus.Web
// File: HttpRequestExt.cs
// 
// Created by: ykors_000 at 27.12.2013 15:56
// 
// Property of SoftGears
// 
// ========

using System;
using System.Linq;
using System.Web;
using DeliveryPlus.Web.DAL;

namespace DeliveryPlus.Web.Classes.Ext
{
    /// <summary>
    /// Расширение класса httpRequest
    /// </summary>
    public static class HttpRequestExt
    {
        /// <summary>
        /// Получает количество блюд в текущем заказе
        /// </summary>
        /// <param name="request">Идентификатор запроса</param>
        /// <returns></returns>
        public static int GetOrderedDishesCount(this HttpRequest request)
        {
            var id = ExtractOrderId(request);
            if (id <= 0)
            {
                return 0;
            }

            var dc = new DeliveryPlusDataContext();
            var order = dc.Orders.FirstOrDefault(o => o.Id == id);
            if (order == null)
            {
                return 0;
            }
            return order.OrderItems.Sum(q => q.Quantity);
        }

        /// <summary>
        /// Возвращает сумму текущего заказа
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static string GetOrderSum(this HttpRequest request)
        {
            var id = ExtractOrderId(request);
            if (id <= 0)
            {
                return String.Format("{0:c}",0);
            }

            var dc = new DeliveryPlusDataContext();
            var order = dc.Orders.FirstOrDefault(o => o.Id == id);
            if (order == null)
            {
                return String.Format("{0:c}", 0);
            }
            return String.Format("{0:c}",order.OrderItems.Sum(oi => oi.Price * oi.Quantity));
        }

        /// <summary>
        /// Извлекает идентификатор заказа из запроса
        /// </summary>
        /// <param name="request">Запрос</param>
        /// <returns></returns>
        public static long ExtractOrderId(this HttpRequest request)
        {
            var cookie = request.Cookies["currentOrder"];
            return cookie == null ? 0 : Convert.ToInt64(cookie.Value);
        }
    }
}